home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / data / nte / nte.plp < prev   
Text File  |  1994-11-16  |  25KB  |  609 lines

  1. /****************************************************************************/
  2. /*                                        */
  3. /*      NIFTY用手抜きセミオートパイロット Ntenuki        */
  4. /*                                        */
  5. /*                       Copyright (c) E.Suto, 1994       */
  6. /****************************************************************************/
  7. /*  V0.00   1994年 2月吉日  試作版                        */
  8. /*  V0.01   1994年 3月10日  公開版                        */
  9. /*  V0.02   1994年 3月14日  終了時常時切断に                    */
  10. /*  V0.03   1994年 6月23日  バイナリメールに対応                */
  11. /*  V0.04   1994年 8月17日  ROAD4に対応(^^;                */
  12. /* ======================================================================== */
  13. /* =============================== 引数宣言 =============================== */
  14. [root,forum,room,week]            /* 引数                    */
  15.                     /* root      : 処理名(関数名)        */
  16.                     /* forum  : FORUM名(FORUM)        */
  17.                     /*        HP-ID(HP)        */
  18.                     /*        PATIO-ID(PATIO) */
  19.                     /*        コマンド(COMMAND)        */
  20.                     /* room      : 会議室番号(FORUM,MREAD) */
  21.                     /*        パスワード(HP,PATIO)    */
  22.                     /* week      : 巡回曜日            */
  23.  
  24. /* =============================== 変数宣言 =============================== */
  25. var    errcode[128] ;            /* エラー原因名                */
  26. var    yn[5] ;                /* Yes/No判定用          */
  27. %Time99    {99999} ;            /* 長時間待ち(^^;            */
  28.  
  29. /* =============================== 環境設定 =============================== */
  30. %Init {
  31. /* MopTermの環境設定 */
  32.     stopbit( {1} ) ;        /* ストップビット            */
  33.     parity( {None} ) ;        /* パリティ                */
  34.     lineend( {CR} ) ;        /* 送信時の行端                */
  35.     lineendt( {CR} ) ;        /* 受信時の行端                */
  36.     flyingx( {No} ) ;        /* フライングX                */
  37.     dataleng( {8bit} ) ;        /* 文字長                */
  38.     flyline( {3} ) ;        /* 先送り行数を定して下さい        */
  39.     code( {sjis} ) ;        /* 使用するコード            */
  40.  
  41.     click( {No} ) ;            /* キークリックの設定(T-OS)        */
  42.     logprint( {No} ) ;        /* ログ印刷の設定(T-OS)            */
  43.     nattou( {Yes} ) ;        /* 納豆スクロールの設定(T-OS)        */
  44.     sendtype( {Ch/2} ) ;        /* 文字単位の設定            */
  45.     doschar( {%} ) ;        /* DOSコマンドの識別子        */
  46.     pilotch( {$} ) ;        /* オートパイロットの識別子        */
  47.     ctrl( {No} ) ;            /* CTRLコードの通過設定        */
  48.     esc( {No} ) ;            /* ESCシーケンスの通過設定        */
  49.     dispecho( {Yes} ) ;        /* エコーバック表示の設定        */
  50.     crmode( {No} ) ;        /* 改行処理の設定            */
  51.     tab( {8} ) ;            /* TAB設定                */
  52.     retmark( {Yes} ) ;        /* 改行/EOFの表示設定        */
  53.     naptype( {Nifty} );        /* NAPLPSタイプ設定        */
  54.     chat( {Yes} ) ;            /* オートパイロット中の入力許可        */
  55. } ;
  56.  
  57. /* =============================== 終了処理 =============================== */
  58. %End{
  59.     discon ;             /* 回線切断                */
  60.     display( {「} | errcode | {」\n} ) ; /* エラーメッセージ表示        */
  61.     display( {「オートパイロットを終了します。」\n} ) ;
  62.     case( root,{CONNECT},,,{Logstop} ) ; /* LOG採取終了            */
  63.     case( @laststr(2),{>},{Logstop} ) ; /* LOG採取終了            */
  64.     case( @laststr(1),{>},{Logstop} )  ; /* LOG採取終了              */
  65.     stop ;                /* 終了                    */
  66. } ;
  67.  
  68. /* ========================== LOG採取終了処理 ========================== */
  69. %Logstop{
  70.     stoprec ;            /* LOG採取終了          */
  71.     stop ;                /* 終了                    */
  72. } ;
  73.  
  74. /* ================================ YES ================================ */
  75. %TRUE{
  76.     yn := {Yes} ;            /* Yes設定(繰り返し)      */
  77. } ;
  78.  
  79. /* ================================= NO ================================= */
  80. %FALSE{
  81.     yn := {No} ;            /* No設定(繰り返さない)      */
  82. } ;
  83.  
  84. /* ============================ 発呼初期化処理 ============================ */
  85. %Dial{
  86. var dialret[5] ;            /* ダイアルリトライ回数            */
  87.     dialret := {0} ;        /* リトライ回数0            */
  88.     wait( {2},) ;            /* ちょっと待つ(^^;            */
  89.     Dialsend ;
  90. } ;
  91.  
  92. /* =============================== 発呼処理 =============================== */
  93. %Dialsend{
  94. var dialcomm[100] ;            /* ダイアル用バッファ            */
  95.     dialcomm := Atcomm | @tail(Telno,{AT}) ; /* ダイアルデータ作成        */
  96.     loop({                /* 接続されまるまでくり返し      */
  97.         dialone( dialcomm , {FALSE} , {TRUE} ) ; /* 発呼        */
  98.         errcode := {発呼に失敗しました(;_;)。} ;/* エラーセット        */
  99.         case( yn,{Yes},{Redial} ) ; /* リダイアルか?          */
  100.     im( yn ) ; } ) ;        /* Noになるまでくり返し      */
  101. } ;
  102.  
  103. /* ============================ リダイアル処理 ============================ */
  104. %Redial{
  105.     dialret := dialret + {1} ;    /* リダイアル回数++            */
  106.     errcode := {ダイアルリトライオーバーです(;_;)} ; /*エラーセット     */
  107.     case( dialret,Maxtry,{End} ) ;    /* リトライオーバーか?            */
  108.     wait( Trywait, ) ;        /* リダイアル待機            */
  109. } ;
  110.  
  111. /* =============================== 接続処理 =============================== */
  112. %Roadcon{
  113.     errcode := {回線が異常です(;_;)} ;/* エラーコードセット            */
  114.     case( Road,{1},{Road1},        /* ROAD1接続            */
  115.         {2},{Road2},        /* ROAD2接続            */
  116.         {3},{Road3},        /* ROAD3接続            */
  117.         {4},{Road3}    ) ;        /* ROAD4接続            */
  118.     sendtype( {Line} ) ;        /* 送信単位の設定            */
  119.     type( {SVC\n} ) ;        /* SVC送信                */
  120.     wait( {30},{End},        /* タイムアウトなら終了            */
  121.         {Enter User-ID  --->}, ) ;    /* ユーザーID待ち            */
  122.     case( Userid,{},,,{        /* ユーザーID設定有りか?        */
  123.     type( Userid | {\n} ) }    ) ;    /* ユーザーID送信            */
  124.     wait( {30},{End},        /* タイムアウトなら終了            */
  125.         {Enter Password --->},) ;    /* パスワード待ち            */
  126.     case( Password,{},{Inpass},,{    /* パスワード設定有りか?        */
  127.     type( Password | {\n} )    } ) ;    /* パスワード送信            */
  128.     TRUE ;                /* ループ設定                */
  129.     loop( {                /* 繰り返し                */
  130.         wait( Time99,{End},{Password --->},{Inpass},/* 入力ミス        */
  131.             {前回LOG OUT},{FALSE} ) ;/* LOGIN完了        */
  132.     im( yn ) ; } ) ;        /* LOGIN出来るまで繰り返し        */
  133. } ;
  134.  
  135. /* ============================ パスワード入力 ============================ */
  136. %Inpass{
  137.     sendtype( {Ch/2} ) ;        /* 文字単位の設定            */
  138.     wait( Time99,{End},{\n}, ) ;    /* 改行待ち                */
  139. } ;
  140.  
  141. /* ============================== ROAD1 ============================== */
  142. %Road1{
  143.     wait( {2},)    ;        /* ちょっと待つ                */
  144.     type( {.00+} );            /* .00+送信                */
  145.     wait( {30},{End},{.00+} ) ;    /* .00+エコーバック待ち            */
  146.     wait( {30},{Road1},        /* タイムアウトなら.00+            */
  147.         {+},{Road1},        /* xx+なら.00+                */
  148.         {Enter Connection-ID  --->}, ) ;/* 接続完了                */
  149. } ;
  150.  
  151. /* ============================== ROAD2 ============================== */
  152. %Road2{
  153.     wait( {2},)    ;        /* ちょっと待つ                */
  154.     type( {@P\n} ) ;
  155.     wait( {10},{Road2},{*} ) ;    /* タイムアウトなら@P            */
  156.     type( {C NIF\n} ) ;        /* C NIF送信                */
  157.     wait( {30},{End},        /* タイムアウトなら終了            */
  158.         {Enter Connection-ID  --->}, ) ;/* 接続完了                */
  159. } ;
  160.  
  161. /* ============================ ROAD3/4 ============================ */
  162. %Road3{
  163.     wait( {30},{End},{*} ) ;    /* タイムアウトなら終了            */
  164.     type( {C NIF\n} ) ;        /* C NIF送信                */
  165.     wait( {30},{End},        /* タイムアウトなら終了            */
  166.         {Enter Connection-ID  --->}, ) ;/* 接続完了                */
  167. } ;
  168.  
  169. /* ========================= MAIL受信チェック ========================= */
  170. %Mailchk{
  171.     errcode := {HOSTが異常です(;_;)} ;/* エラーコードセット        */
  172.     wait( {PRtimer},{End},        /* タイムアウトなら終了            */
  173.         {通)--},{Mailwait},    /* MAIL待ち処理へ            */
  174.         {\n>}, ) ;            /* MAIL無し                */
  175. } ;
  176.  
  177. /* ============================= MAIL待ち ============================= */
  178. %Mailwait{
  179.     wait( {PRtimer},{End},{\n>}, ) ;/* タイムアウトなら終了        */
  180.     Mailin ;            /* MAIL受信へ            */
  181. } ;
  182.  
  183. /* =========================== MAIL受信処理 =========================== */
  184. %Mailin{
  185. var bmailbox[152] ;            /* バイナリMAILの情報格納用        */
  186.     type( {go mail\n} ) ;        /* MAILへ                */
  187.     wait( {PRtimer},{End},        /* タイムアウトなら終了            */
  188.         {\n>},{Menuoff},        /* エキスパートモードへ            */
  189.         {\nMAIL>}, ) ;        /* MAILモード            */
  190.     type( {set page off\n} ) ;    /* ページ制御抑止            */
  191.     wait( {PRtimer},{End},{\nMAIL>}, ) ;/* タイムアウトなら終了        */
  192.     type( {read new\n} ) ;        /* MAIL読込                */
  193.     wait( Time99,{End},{action:},{Mailloop}, /* MAIL有り      */
  194.         {はバイナリーのため},{Bmail}, /* バイナリMAIL有り        */
  195.                     /* バイナリMAILモード        */
  196.         {NAPLPSのデコーダーが必要です。準備 (1:OK  2:NG) \n:},
  197.             {Nmail},    /* NAPLPSMAILモード        */
  198.         {\nMAIL>}, ) ;        /* MAIL終わり          */
  199.     case( @nochar(bmailbox),{0},,    /* バイナリメール有りか?        */
  200.         ,{Bdown} ) ;        /* 有りの場合ダウンロードへ        */
  201.     type( {set page on\n} ) ;    /* ページ制御戻し            */
  202.     wait( {PRtimer},{End},        /* タイムアウトなら終了            */
  203.         {\nMAIL>}, ) ;        /* MAILモード            */
  204. } ;
  205.  
  206. /* =========================== MAIL受信処理 =========================== */
  207. %Mailloop{
  208.     loop( {                /* くり返し              */
  209.         type( {2\n} ) ;        /* 取り合えずセーブ            */
  210.         wait( Time99,{End},{action:},{TRUE}, /* 繰り返し        */
  211.             {はバイナリーのため},{Bmail}, /* バイナリMAIL   */
  212.                     /* バイナリMAILモード        */
  213.             {NAPLPSのデコーダーが必要です。準備 (1:OK  2:NG) \n:},
  214.                 {Nmail},/* NAPLPSMAILモード        */
  215.             {\nMAIL>},{FALSE}) ;/* MAIL終了            */
  216.     im( yn ) ; } ) ;        /* Noの間くり返し          */
  217. } ;
  218.  
  219. /* ===================== NAPLPSMAIL受信処理 ===================== */
  220. %Nmail{
  221.     type( { 1\n } ) ;        /* NAPLPS受信            */
  222.     wait( {1},)    ;        /* ちょっと待つ                */
  223.     type( { \n } ) ;        /* 空エンター                */
  224.     wait( Time99,{End},{action:},); /* 表示終了待ち                */
  225.     napend ;            /* 文字モードへ                */
  226.     {Mailloop} ;            /* MAILループへ            */
  227. } ;
  228.  
  229. /* ===================== バイナリMAIL番号受信処理 ===================== */
  230. %Bmail{
  231.     bmailbox := bmailbox | {,}    /* バイナリメール番号格納        */
  232.           | @tail(@laststr(40),{◆番号},{はバイナリーのため}) ;
  233.     wait( Time99,{End},{action:},{Mailloop}, /* 繰り返し            */
  234.         {はバイナリーのため},{Bmail}, /* バイナリMAIL        */
  235.                     /* バイナリMAILモード        */
  236.         {NAPLPSのデコーダーが必要です。準備 (1:OK  2:NG) \n:},
  237.             {Nmail},    /* NAPLPSMAILモード        */
  238.         {\nMAIL>},{FALSE}) ;    /* MAIL終了                */
  239. } ;
  240.  
  241. /* ======================= バイナリMAIL受信処理 ======================= */
  242. %Bdown{
  243. var downname[128] ;            /* ダウンロードファイル名        */
  244. var blogday[4] ;            /* ファイル名に埋め込む月日      */
  245. var downnum[3] ;            /* ダウンロードメール番号        */
  246.  
  247.     case( @nochar(@day),{4},{blogday := @day;},/* 4文字の場合はそのまま*/
  248.         {3},{blogday := {0}|@day ;} ) ;    /* 3文字の場合0を追加      */
  249.     type( {down\n} ) ;        /* メール一覧表示            */
  250.     wait( {PRtimer},{End},        /* タイムアウトなら終了            */
  251.         {\n>}, ) ;        /* ダウンロードモード            */
  252.     type( {e\n} ) ;            /* メールモードヘ戻る            */
  253.     wait( {PRtimer},{End},        /* タイムアウトなら終了            */
  254.         {\nMAIL>}, ) ;        /* MAILモード            */
  255.     loop( {                /* くり返し                */
  256.         downnum := @tail( bmailbox,{,} ) ; /* メール番号切り出し    */
  257.         type( {down } | downnum | { PROT:BPL\n} ) ; /* ダウンロード */
  258.         wait( {PRtimer},{End},{\n:}, ) ;/* タイムアウトなら終了    */
  259.         Bname ;            /* 受信ファイル名作成            */
  260.         type( downname | {\n} ) ; /* ファイル名送信            */
  261.         wait( Time99,{End},{\n:}, ) ; /* タイムアウトなら終了        */
  262.         type( {2\n} ) ;        /* 取り合えずセーブ            */
  263.         wait( {PRtimer},{End},    /* タイムアウトなら終了            */
  264.             {\nMAIL>}, ) ;    /* MAILモード            */
  265.         downnum := {,} | downnum ; /* ,を付ける                */
  266.         bmailbox := @head( bmailbox,downnum ) ; /* 次のメールへ        */
  267.         case( @nochar(bmailbox),{0},{FALSE},/*バイナリメール有りか?*/
  268.         ,{TRUE} ) ;        /* 有りの場合ダウンロードへ        */
  269.     im( yn ) ; } ) ;        /* Noの間くり返し          */
  270. } ;
  271.  
  272. /* ================== バイナリMAILファイル名作成処理 ================== */
  273. %Bname{
  274. var bnames[27];
  275. var number[1];
  276.     bnames:={abcdefghijklmnopqrstuvwxyz} ; /* 拡張子ベース初期設定        */
  277.     number:={0} ;            /* ループ初期値                */
  278.     loop( {                /* くり返し                */
  279.         number := number + {1}; /* 文字位置更新                */
  280.         downname := Rcvdir |    /* 受信ディレクトリ            */
  281.             Logname |    /* LOG名                */
  282.                  blogday |    /* 月日                    */
  283.             {.}     |    /* 区切り                */
  284.             @getchar( bnames,number,{1} ) |    /* 拡張子ベース        */
  285.             downnum ;    /* メール番号                */
  286.         case( @filechk( downname ), /* 既に有るか?            */
  287.             {Yes},{TRUE},    /* 有り                    */
  288.             {No},{FALSE} ) ;/* 無し                    */
  289.     im( yn ) ; } ) ;        /* Noの間くり返し          */
  290. } ;
  291.  
  292. /* ============================    FORUM移動 ============================ */
  293. %FMread{
  294.     type( {go } | forum | {\n} ) ;    /* 指定FORUMへ移動            */
  295.     FPwait ;            /* プロンプト待ち            */
  296.     type( {mes\n} );        /* 会議室移動                */
  297.     wait( {PRtimer},{End},{\n>}, ) ;/* タイムアウトなら終了        */
  298.     Mre ;                /* MREAD                */
  299. } ;
  300.  
  301. /* ======================= FORUMプロンプト待ち ======================= */
  302. %FPwait{
  303.     loop( {                /* くり返し              */
  304.         wait( {PRtimer},{End},    /* タイムアウトなら終了            */
  305.             {E:終了},{Chgmode},    /* MENU OFFへ        */
  306.             {\nmore},{More},    /* 継続処理へ            */
  307.             {\n続き (改行で},{More},/* 継続処理へ            */
  308.             {\nFORUM>},{FALSE}) ;    /* プロンプト受信        */
  309.     im( yn ) ; } ) ;        /* Noの間くり返し          */
  310. } ;
  311.  
  312. /* ============================    PATIO移動 ============================ */
  313. %PMread{
  314.     type( {go patio\n} ) ;        /* PATIOへ移動            */
  315.     wait( {PRtimer},{End},{\n>}, ) ;/* タイムアウトなら終了        */
  316.     type( {2\n} ) ;            /* サービスに入る            */
  317.     wait( {PRtimer},{End},{\n:}, ) ;/* タイムアウトなら終了        */
  318.     case( forum,{},,,{        /* PATIO-ID設定有りか?        */
  319.     type( forum | {\n} ) } ) ;    /* PATIO-ID送信            */
  320.     wait( {PRtimer},{End},{\n:}, ) ;/* タイムアウトなら終了        */
  321.     case( room,{},{Inpass},,{    /* PATIO-PASSWORD設定有りか?        */
  322.     type( room | {\n} ) } )    ;    /* PATIO-PASSWORD送信        */
  323.     PPwait ;            /* プロンプト待ち            */
  324.     type( {mre\n} ) ;        /* MREAD発行            */
  325.     Mcheck ;            /* MREAD                */
  326. } ;
  327.  
  328. /* ======================= PATIOプロンプト待ち ======================= */
  329. %PPwait{
  330.     loop( {                /* くり返し              */
  331.         wait( {PRtimer},{End},    /* タイムアウトなら終了            */
  332.             {\nmore},{More},    /* 継続処理へ            */
  333.             {\n続き (改行で},{More},/* 継続処理へ            */
  334.             {\n>} ,{FALSE}) ;    /* プロンプト受信        */
  335.     im( yn ) ; } ) ;        /* Noの間くり返し          */
  336. } ;
  337.  
  338. /* =============================== HP準備 =============================== */
  339. %HPset{
  340.     case( @laststr(3),{HP>},{HPmove},,{HPgo} ) ; /* HPならMOVEそれ以外GO*/
  341. } ;
  342.  
  343. /* =========================== HP移動(連続)    =========================== */
  344. %HPmove{
  345.     type( {move\n} ) ;        /* HP間移動                */
  346.     HPread ;            /* HP読込処理へ            */
  347. } ;
  348.  
  349. /* =========================== HP移動(単独)    =========================== */
  350. %HPgo{
  351.     type( {go hp\n} ) ;        /* HPへ移動                */
  352.     wait( {PRtimer},{End},{\n>}, ) ;/* タイムアウトなら終了        */
  353.     type( {1\n} ) ;            /* サービスに入る            */
  354.     HPread ;            /* HP読込処理へ            */
  355. } ;
  356.  
  357. /* =============================== HP読込 =============================== */
  358. %HPread{
  359.     wait( {PRtimer},{End},{\n:}, ) ;/* タイムアウトなら終了        */
  360.     case( forum,{},,,{        /* HP-ID設定有りか?        */
  361.     type( forum | {\n} ) } ) ;    /* HP-ID送信            */
  362.     wait( {PRtimer},{End},{\n:}, ) ;/* タイムアウトなら終了        */
  363.     case( room,{},{Inpass},,{    /* HP-PASSWORD設定有りか?        */
  364.     type( room | {\n} ) } )    ;    /* HP-PASSWORD送信            */
  365.     wait( {PRtimer},{End},{\nHP>}, ) ;/* タイムアウトなら終了        */
  366.     type( {set page off\n} ) ;    /* ページ制御抑止            */
  367.     wait( {PRtimer},{End},{\nHP>}, ) ;/* タイムアウトなら終了        */
  368.     type( {read new\n} ) ;        /* 新規読込                */
  369.     HPcheck ;            /* {HP>}待ち                */
  370.     type( {set page on\n} ) ;    /* ページ制御戻し            */
  371.     wait( {PRtimer},{End},{\nHP>}, ) ;/* タイムアウトなら終了        */
  372. } ;
  373.  
  374. /* ============================= {HP>}待ち処理 ============================ */
  375. %HPcheck {
  376.     loop( {                /* くり返し              */
  377.         wait( {Time99},{End},{HP>},) ;    /* タイムアウト無し{HP>}待ち*/
  378.         loop( {            /* くり返し                */
  379.             wait( {1},{FALSE}, /* 1秒タイムアウトで終了        */
  380.                 {HP>},{TRUE}) ;/* 再度{HP>}受信            */
  381.         im( yn ) ; } ) ;    /* Noの間くり返し          */
  382.         case( @laststr(3),{HP>},{FALSE},/* {HP>}のままか?        */
  383.             ,{TRUE} ) ;    /* {HP>}以外                */
  384.     im( yn ) ; } ) ;        /* Noの間くり返し          */
  385. } ;
  386.  
  387. /* ========================== MENU OFFへ ========================== */
  388. %Chgmode{
  389.     wait( {PRtimer},{End},        /* タイムアウトなら終了            */
  390.         {\n>},{Menuoff}) ;        /* エキスパートモードへ            */
  391. } ;
  392.  
  393. /* =============================== 改ページ =============================== */
  394. %More{
  395.     type( {\n} ) ;            /* 空改行                */
  396.     TRUE ;                /* 繰り返す              */
  397. } ;
  398.  
  399. /* ========================= エキスパートモードへ ========================= */
  400. %Menuoff{
  401.     type( {set men off\n} ) ;    /* MENU OFF            */
  402.     wait( {PRtimer},{End},{>}, ) ;    /* タイムアウトなら終了            */
  403.     FALSE ;                /* 繰り返さない              */
  404. } ;
  405.  
  406. /* ============================== MREAD ============================== */
  407. %Mre{
  408.     type( {mre room:} | room | {\n} ) ;/* MREAD発行            */
  409.     Mcheck ;            /* {>}待ち                */
  410. } ;
  411.  
  412. /* ============================= {>}待ち処理 ============================= */
  413. %Mcheck{
  414.     loop( {                /* くり返し              */
  415.         wait( Time99,{End},{>},) ; /* タイムアウト無し{>}待ち        */
  416.         loop( {            /* くり返し                */
  417.             wait( {1},{FALSE}, /* 1秒タイムアウトで終了        */
  418.                 {のユーザーからのメッセージです-},Sendid,
  419.                 {>},{TRUE} );/* 再度{>}受信            */
  420.         im( yn ) ; } ) ;    /* Noの間くり返し          */
  421.         case( @laststr(2),{>},{FALSE},/* {>}のままか?        */
  422.             ,{TRUE} ) ;    /* {>}以外                */
  423.     im( yn ) ; } ) ;        /* Noの間くり返し          */
  424. } ;
  425.  
  426. /* =========================== SENDID受信 =========================== */
  427. %Sendid{
  428. var    id[50] ;            /* ID受信用                */
  429. var    lastdata[34] ;            /* 受信文字列確認用          */
  430.  
  431.     id := @body( @laststr(46),{-},{ } ) ; /* SEND ID読込        */
  432.     Sendrcv ;            /* SEND返し                */
  433. } ;
  434.  
  435. /* ============================= SEND返し ============================= */
  436. %Sendrcv{
  437.     lastdata := @laststr(32) ;     /* SEND ID読込            */
  438.     wait( {1},) ;            /* 1秒待ちループ            */
  439.     case( @laststr(32),lastdata,,,{Sendrcv} ) ; /* まだ受信中か?        */
  440.     type( {send } | id |
  441.     {ごめんなさい、オートパイロット中なの(_o_)。\n} ) ; /* SEND返し */
  442.     FALSE ;                /* {>}待ちへ                */
  443. } ;
  444.  
  445. /* ========================== COMMAND送信 ========================== */
  446. %Comsend{
  447.     type( forum | {\n} ) ;        /* コマンド送信                */
  448.     Ccheck ;            /* プロンプト待ち            */
  449. } ;
  450.  
  451. /* ============================= {>}待ち処理 ============================= */
  452. %Ccheck    {
  453. var lastdata[34] ;            /* 受信文字列確認用          */
  454.  
  455.     loop( {                /* くり返し              */
  456.         wait( {Time99},{End},    /* タイムアウト無しプロンプト待ち   */
  457.             {>},,        /* >                    */
  458.             {>},,        /* >                    */
  459.             {終了は行頭で/E)\n},,/* 終了は行頭で/E            */
  460.             { 2:しない)\n},,  /* 2:しない)                */
  461.             { 3:期日指定)\n},,/* 3:期日指定)            */
  462.             {(1:OK  2:NG)\n},, /* (1:OK  2:NG)            */
  463.             {(1:OK  2:NG) \n},,/* (1:OK  2:NG)            */
  464.             {3:修正)\n},,       /* 3:修正)                */
  465.             {ロード開始-\n},, /* ロード開始-            */
  466.             {2:コメント)\n},,  /* 2:コメント)            */
  467.             {題名 (漢字で20文字まで)\n},,/* 題名 (漢字で20文字ま*/
  468.             {:},) ;    /* :                    */
  469.         loop( {            /* くり返し                */
  470.             lastdata := @laststr(32) ;/* 現在の受信文字読込        */
  471.             wait( {1},{FALSE},/* 1秒タイムアウトで終了        */
  472.                 {のユーザーからのメッセージです-},Sendid,
  473.                 {>},{TRUE},    /* >                */
  474.                 {>},{TRUE},    /* >                */
  475.                 {終了は行頭で/E)\n},{TRUE},/* 終了は行頭で/E*/
  476.                 { 2:しない)\n},{TRUE},     /* 2:しない)        */
  477.                 { 3:期日指定)\n},{TRUE},/* 3:期日指定)     */
  478.                 {(1:OK  2:NG)\n},{TRUE}, /* (1:OK  2:NG)    */
  479.                 {(1:OK  2:NG) \n},{TRUE},/* (1:OK  2:NG)    */
  480.                 {3:修正)\n},{TRUE},     /* 3:修正)        */
  481.                 {ロード開始-\n},{TRUE}, /* ロード開始-    */
  482.                 {2:コメント)\n},{TRUE},  /* 2:コメント      */
  483.                 {題名 (漢字で20文字まで)\n},{TRUE},/* 題名  */
  484.                 {:},{TRUE} ) ;        /* :            */
  485.         im( yn ) ; } ) ;    /* Noの間くり返し          */
  486.         case( @laststr(32),lastdata,{FALSE},     /* まだ受信中か?  */
  487.             ,{TRUE} ) ;    /* 受信中                */
  488.     im( yn ) ; } ) ;        /* Noの間くり返し          */
  489. } ;
  490.  
  491. /* ============================ OFF送信処理 ============================ */
  492. %Offsend{
  493.     type( {off\n} ) ;        /* OFF送信                */
  494.     wait( {5},,{ご利用誠にありがとうございました。} ) ; /* 終了メッセージ   */
  495.     Disconn ;            /* 切断振り分け                */
  496.     errcode := {正常に処理が完了しました。} ; /* 正常終了メッセージ        */
  497.     End ;                /* 終了処理                */
  498. } ;
  499.  
  500. /* =========================== 切断振り分け処理 =========================== */
  501. %Disconn{
  502.     case( Road,{1},{Droad1},    /* ROAD1切断          */
  503.         {2},{Droad23},        /* ROAD2切断          */
  504.         {3},{Droad23} ) ;    /* ROAD3切断            */
  505. } ;
  506.  
  507. /* ============================ ROAD1切断 ============================ */
  508. %Droad1{
  509.     wait({3},,{00+},) ;        /* NIFTY終了            */
  510. } ;
  511.  
  512. /* ============================ ROAD2切断 ============================ */
  513. %Droad23{
  514.     wait({3},,{*}, ) ;        /* NIFTY終了            */
  515.     type({off\n}) ;            /* OFF送信                */
  516. } ;
  517.  
  518. /* =============================== 手動処理 =============================== */
  519. %Manual{
  520.     sendtype( {Line} ) ;        /* 送信単位の設定            */
  521.     loop( {                /* くり返し                */
  522.         wait( {Time99},{End},{ご利用誠にありがとうございました。}, ) ;
  523.         wait( {PRtimer},{FALSE},/* 終了                  */
  524.             {01},{FALSE},    /* ROAD1終了                */
  525.             {HOST NAME?},{FALSE},/* ROAD23終了            */
  526.             {Enter},{TRUE} ) ; /* まだ継続                */
  527.     im( yn ) ; } ) ;        /* Noの間くり返し          */
  528.     Disconn ;            /* 切断振り分け                */
  529.     errcode := {正常に処理が完了しました。} ; /* 正常終了メッセージ        */
  530.     End    ;            /* 終了処理                */
  531. } ;
  532.  
  533. /* ======================== 初期化~接続~MAIL ======================== */
  534. %CONNECT{
  535. var logday[4] ;                /* LOG名に埋め込む月日      */
  536.     Init ;                /* 初期化                */
  537.     Dial ;                /* 発呼                    */
  538.     Roadcon ;            /* FENICS接続            */
  539.     case( @nochar(@day),{4},{logday := @day;},/* 4文字の場合はそのまま */
  540.         {3},{logday := {0}|@day ;} ) ;    /* 3文字の場合0を追加      */
  541.     receive( Rcvdir |        /* LOG採取開始:ディレクトリ        */
  542.          Logname |            /*           LOG名        */
  543.          logday  |            /*           月日            */
  544.         {.log} ) ;            /*           拡張子        */
  545.     Mailchk ;            /* MAIL受信                */
  546. } ;
  547.  
  548. /* ============================    FORUM巡回 ============================ */
  549. %FORUM{
  550.     FMread ;            /* FORUM巡回へ            */
  551. } ;
  552.  
  553. /* ============================    PATIO巡回 ============================ */
  554. %PATIO{
  555.     PMread ;            /* PATIO巡回処理へ            */
  556. } ;
  557.  
  558. /* =============================== HP巡回 =============================== */
  559. %HP{
  560.     HPset ;                /* HP巡回処理へ            */
  561. } ;
  562.  
  563. /* ============================ COMMAND ============================ */
  564. %COMMAND{
  565.     Comsend ;            /* COMMAND処理へ            */
  566. } ;
  567.  
  568. /* ============================= PROMPT ============================= */
  569. %PROMPT{
  570.     Ccheck ;            /* プロンプト待ち            */
  571. } ;
  572.  
  573. /* ============================= MAIL処理 ============================= */
  574. %MAILREAD{
  575.     Mailin ;            /* MAIL処理へ            */
  576. } ;
  577.  
  578. /* ============================== MRE処理 ============================== */
  579. %MREAD{
  580.     Mre ;                /* MREAD処理へ            */
  581. } ;
  582.  
  583. /* ============================= 停止終了処理 ============================= */
  584. %STOPEND{
  585.     select({「このまま5秒間入力が無いと、自動終了します。」},
  586.         {5},{Offsend},        /* タイムアウトで終了            */
  587.         {終了},{Offsend},     /* 通信終了                */
  588.         {手動},{Manual}) ;    /* 手動に移行                */
  589. } ;
  590.  
  591. /* =========================== MAIN振り分け    =========================== */
  592. /* 処理分岐 */
  593. var    www[24]    ;            /* 今日の曜日                */
  594. var    work[128] ;            /* WORK                */
  595.     case( @nochar( week ),{0},{root} ) ; /* 曜日指定無し毎日巡回        */
  596.     www := @body( @daylong,{ },{ } ) ;   /* 曜日切り出し            */
  597.     work := @head( week , www ) ;    /* 指定曜日検索                */
  598.     case( week,work,,,{root} ) ;    /* 検索前と一致しない場合巡回        */
  599.                     /* CONNECT :初期化~接続~MAIL  */
  600.                     /* FORUM   :FORUM巡回        */
  601.                     /* HP       :HP巡回            */
  602.                     /* PATIO   :PATIO巡回        */
  603.                     /* COMMAND :ダイレクトコマンド        */
  604.                     /* PROMPT  :プロンプト待ち        */
  605.                     /* MREAD   :MREAD処理        */
  606.                     /* MAILREAD:MAIL読み込み       */
  607.                     /* STOPEND :停止終了処理        */
  608. /********************************* 終わり ***********************************/
  609.